package com.java.prittern.singleton;
//登记式/静态内部类
//线程安全，实现难度一般
//能达到双检锁方式一样的功效，但实现更简单，对静态域使用延迟初始化，应使用这种方式而不是双检锁方式，
// 这总方式只适用于静态域的情况，双检锁方式可在实例域需要延迟初始化时使用

//这种方式利用classloader机制来保证初始化instance时只有一个线程，
// 它跟第三种方式不同的是：第三种方式只要singleton类被装载了，那么instance就会被实例化（没有达到延迟加载的效果）
//而这种方式是Singleton类被装载了，instance不一定被初始化，因为singltonHolder类美欧被主动使用，
// 只有通过显式调用getinstance方法时，才会显式转正SingletonHoder类，从而实例化instance

/**
 * 如果实例化instance很消耗资源，所以想让它延迟加载，另一方面，又不希望在Singleton类加载时就实例化，因为不能确保Singleton
 * 类还可以在其他的地方主动使用从而被加载，那么这个实例化nstance显然是不合适的，这个时候，这种方式相比第三种方式就显得很合理
 */
public class Singleton5 {
    private static class SingletonHolder{
        private static final Singleton5 INSTANCE=new Singleton5();
    }
    private Singleton5(){}
    public static final Singleton5 getInstance(){
        return SingletonHolder.INSTANCE;
    }
}
